// function makeFn() {
//   let msg = 'hello world';
//   return function () {
//     console.log(msg);
//   }
// }

// const fn = makeFn();
// fn()


// once
function once(fn) {
  let flag = false; 
  // 这里的arguments是 fn
  return function () {
    if (!flag) {
      flag = true;
      // 这种能改变this的指向 不管传入几个参数 都能处理
      return fn.apply(this, arguments);
    }
  }
}

// function once(fn) {
//   let flag = false;
//   // 这种在传入多个函数的时候 还得改结构 
//   return function (money) {
//     if (!flag) {
//       flag = true;
//       return fn(money);
//     }
//   }
// }

let pay = once((money, a, b) => console.log(money));

pay(5, 1, 2, 3);
pay(5);
pay(5);
pay(5);